package com.wcj.queue;


import java.util.HashSet;
import java.util.Set;
import java.util.Stack;
import java.util.TreeSet;

/**
 * 根据 逆波兰表示法，求表达式的值。
 *
 * 有效的算符包括 +、-、*、/ 。每个运算对象可以是整数，也可以是另一个逆波兰表达式。
 *
 * 注意 两个整数之间的除法只保留整数部分。
 *
 * 可以保证给定的逆波兰表达式总是有效的。
 * 换句话说，表达式总会得出有效数值且不存在除数为 0 的情况。
 *
 * 输入：tokens = ["2","1","+","3","*"]
 * 输出：9
 * 解释：该算式转化为常见的中缀算术表达式为：((2 + 1) * 3) = 9
 */
public class 逆波兰表达式 {

    public static void main(String[] args) {
        evalRPN(new String[]{"4","13","5","/","+"});
    }

    public static int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack();
        TreeSet a = new TreeSet();
        for (String token : tokens) {
            if (token.equals("+")){
                Integer one = stack.pop();
                Integer two = stack.pop();
                stack.push(two + one);
            }else if (token.equals("-")){
                Integer one = stack.pop();
                Integer two = stack.pop();
                stack.push(two - one);
            }else if (token.equals("*")){
                Integer one = stack.pop();
                Integer two = stack.pop();
                stack.push(two * one);
            }else if (token.equals("/")){
                Integer one = stack.pop();
                Integer two = stack.pop();
                stack.push(two / one);
            }else{
                stack.push(Integer.parseInt(token));
            }
        }
        return stack.pop();
    }
}
